package com.egoo.ticket.server.utils.common;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author：victor_tang
 * @Date ：2020/2/26
 * @Description：日期处理工具类
 */
@Component
@Slf4j
public class DateHandleUtil {
	public static  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	public static  SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	/**
	 * TODO 获取全年日期列表
	 * @author: victor_tang
	 * @createtime: 2020/2/26 12:19
	 * @param
	 * @return: java.utils.List<java.lang.String>
	 */
	public static List<String> getYearAllDate(List<Integer> moreYear) {
		List<String> dataList = new ArrayList<String>();
		try {
			for (Integer year:moreYear) {
//				Calendar date = Calendar.getInstance();
//				String year = String.valueOf(date.get(Calendar.YEAR));
				String beginDate = year + "-01-01";
				String endDate = year + "-12-31";

				Date dBegin = sdf.parse(beginDate);
				Date dEnd = sdf.parse(endDate);
				// 当前年所有日期集合
				List<String> yearList = getDateList(dBegin, dEnd);
				dataList.addAll(yearList);
			}
			return dataList;
		} catch (ParseException e) {
			log.info("获取全年日期异常：" + e);
			return dataList;
		}
	}

	/**
	 * TODO 获取某一时间段的所有年月日（包含开始和结束）
	 * @author: victor_tang
	 * @createtime: 2020/2/26 12:19
	 * @param dBegin 开始日期
	 * @param dEnd 结束日期
	 * @return: java.utils.List<java.lang.String>
	 */
	public static List<String> getDateList(Date dBegin, Date dEnd) {
		List<String> lDate = new ArrayList<String>();
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
		lDate.add(sd.format(dBegin));
		Calendar calBegin = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calBegin.setTime(dBegin);
		Calendar calEnd = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calEnd.setTime(dEnd);
		// 测试此日期是否在指定日期之后
		while (dEnd.after(calBegin.getTime())) {
			// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
			calBegin.add(Calendar.DAY_OF_MONTH, 1);
			lDate.add(sd.format(calBegin.getTime()));
		}
		return lDate;
	}
	/**
	 * TODO 根据时间戳获取格式化后的时间字符串
	 * @author: victor_tang
	 * @createtime: 2020/5/8 18:00
	 * @param times 1
	 * @return: java.lang.String
	 */
	public static String getFormatDateTimeByTimes(long times){
		if (times<=0) {
			log.error("传入的时间时间戳不能小于等于0！");
			return null;
		}
		synchronized (sdfTime) {
			return sdfTime.format(times);
		}
	}

	public static Long getTimeByDateStr(String  dateStr) {
		if (StringUtils.isEmpty(dateStr)){
			log.info("传入时间参数不能为空");
			return null;
		}
		Date date = null;
		try {
			date = sdfTime.parse(dateStr);
		} catch (ParseException e) {
			log.info("日期时间格式错误，解析异常"+e);
		}
		long time = date.getTime();
		return time;
	}

}
